# # 作业：
# # 1、有这样的一个列表，深度不可知，列表里面还会嵌套列表，
# # 我想要把这个列表从左到右拼接成一个新的列表，且顺序不变
# # 举例：[12,33,[11,22,33,[55,66,99]],[55,66]]
# # 变成：[12, 33, 11, 22, 33, 55, 66, 99, 55, 66]
# # list1=[12,33,[11,22,33,[55,66,99]],[55,66]]
# # def num(list2:list):
# #     result = []
# #     for i in list2:
# #         # if isinstance(i,list):
# #         if type(i) == list:
# #             result.extend(num(i))
# #         else:
# #             result.append(i)
# #     return result
# #
# #
# # print(num(list1))
#
#
# # 2、编写装饰器，为多个函数加上认证的功能（用户的账号密码）
# #  要求登录成功一次，后续的函数都无需输入用户名和密码
# # def num(func):
# #     def luoji(*args,**kwargs):
# #         user=input("请输入账号")
# #         pwd=input("请输入密码")
# #         if user=="admin" and pwd=="12345":
# #             print("登录成功")
# #             func(*args,**kwargs)
# #         else:
# #             print("登录失败")
# #     return luoji
# # @num
# # def num():
# #     print("钱钱钱")
# # num()
#
#
#
# # 3、请实现一个装饰器，把函数的返回值+100然后返回
# # def num(func):
# #     def luoji(*args,**kwargs):
# #         a=func(*args,**kwargs)
# #         return a +100
# #     return luoji
# # @num
# # def num():
# #     return 6
# # print(num())
#
#
# # # 4、请实现一个装饰器，通过一次调用使函数重复执行5次
# # def num(func):
# #     def luoji(*args,**kwargs):
# #         for i in range(5):
# #             func(*args,**kwargs)
# #     return luoji
# # @num
# # def num():
# #     print("ok")
# # num()
#
#
#
#
#
#
# # 5、输入任意个字符串,分别实现从小到大输出和从大到小输出
# # def strSort(obj:str)->tuple:
# #     obj_s = sorted(obj)   # 由小到大排序的
# #     obj_j = sorted(obj,reverse=True)  # 由大到小排序
# #     return obj_s,obj_j
#
#
# # print(strSort("poukajsdas"))
# #list1 = [11,22,8,99,1]
# # print(sorted(list1))        # 默认是升序，从小到大排列
# # sorted   ：叫做原地排序，什么是原地排序？   就是说不改变原来的列表结构，原来的还是原来的
# # print(list1)
#
# # sort排序：真正的对列表进行改变，由小到大的排序
# # list1.sort()
# # print(list1)
#
#
#
#
#
#
#
#
#
#
#
#
#
# # 6、接收n个数字，求这些参数数字的和
# # def num(*args):
# #     a=0
# #     for i in args:
# #         a += i
# #     return a
# # print(num(1,3,5))
#
#
#
#
# # 7、编写一个函数，实现数字的自增（从0开始，每调用一次，数字+1）
# # def num():
# #     a=0
# #     def add():
# #         nonlocal a
# #         a+=1
# #         return a
# #     return add
# # a =num()
# # print(a())
# # print(a())
# # print(a())
# # print(a())
#
# # str1="name:chen,age:12"
# # str_iter=str1.__iter__()
# # print(next(str_iter))
# # print(next(str_iter))
# #
# #
# # lis1=[11,22,33]
# # list_iter=lis1.__iter__()
# # print(next(list_iter))
# # print(next(list_iter))
# #
# # str1="name,age,sex"
# # str_iter=str1.__iter__()
# # print(next(str_iter))
# # print(next(str_iter))
# # print(next(str_iter))
#
# # def num():
# #     a=0
# #     while True:
# #         yield a
# #         a +=1
# #         print("lalla")
# # a=num()
# # print(next(a))
# # print(next(a))
# # print(next(a))
#
#
# 1、编写一个学生方法，产生一堆学生对象（姓名），传入形参控制学生生成数量
# from faker import Faker
# faker = Faker(locale='zh_cn')
# def stu1(nums:int)->list:
#     str1 = ''
#     for i in range(nums):
#         str1 += str(faker.name()) + "\n"
#
#     with open('stu.txt','w',encoding='utf-8')as f:
#         f.write(str1)
#     with open('stu.txt','r',encoding='utf-8') as f:
#         all_lines = f.readlines()
#     return all_lines
#
# print(stu1(10))


# 2、创建一个方法，用来生成普通人必备的信息：姓名、年龄、住址、身份证号、手机号，随机生成20个写入personinfo.txt里
# 格式：姓名：xxx  年龄：xxx 住址：xxx 身份证号：xxx
# from faker import Faker
# import random
# faker = Faker(locale='zh_cn')
# def stu2(xinxi:int)->list:
#     str2 = ''
#     for i in range(xinxi):
#         num = random.randint(0, 99)
#         str2 += "姓名：" +str(faker.name()) + " 地址："+ str(faker.address()) + "  年龄："+ str(num) + "\n"
#     with open('2.txt','w',encoding='utf-8') as f:
#         f.write(str2)
#     with open('2.txt','r',encoding='utf-8') as f:
#         all_lines = f.readlines()
#     return all_lines

# print(stu2(10))
# 3、文本 student.txt中包含下面的内容
# zhangshan:30
# lisi:50
# wangwu:60
# lifei:70
# 期望能够统计出其中的内容，以dict的形式保存，例如： {"zhangshan":30,"lisi":50,"wangwu":60,"lifei":70}
#
with open("1.txt","r",encoding="utf-8")as f:
    print(f.read())


# 4、给你一个 非空 整数数组 nums ，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素
# def int1(nums:list):
#     for i in nums:
#         if nums.count(i)==1:
#             print(i)
# int1("1,2,3")



# 5、输入：["1","a","b","3","5","8","_"] 想要提取里面得数字，并保存到一个列表中
# int1=["1","a","b","3","5","8","_"]
# def num(int1:int)->list:
#     list1=[]
#     for i in int1:
#         if i in "123456789":
#             list1.append(i)
#     return list1
# print(num(int1))


# 6、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
# 用户通过input输入这4个内容(支持持续输入,Q或q退出),并传递给函数，函数接收到这些内容,将其追加到student_msg文件中
# def num(name,gender="男",age,address):





# 7、打印功能菜单、添加学生信息、删除学生信息、修改学生信息、显示学生信息、退出系统，并且需要接收用户的输入，在根据输入内容调用相应函数实现相应功能（存入文件），模板图如下。每次对学生管理系统发生改动，要写入改动点到log.txt文本中
# 8、如今的社交软件层出不穷，虽然功能千变万化，但都具有好友管理系统的基本功能，包括添加好友、删除好友、备注好友、展示好友等。下面是一个简单的好友管理系统的功能菜单（存入文件）
# 好友管理系统中有5个功能，每个功能都对应一个序号，用户可根据提示“请输入您的选项”选择序号执行相应的操作，包括：
# 添加好友：用户根据提示“请输入要添加的好友：”输入要添加好友的姓名，添加后会提示“好友添加成功”。
# 删除好友：用户根据提示“请输入删除好友姓名：”输入要删除好友的姓名，删除后提示“删除成功”
# 备注好友：用户根据提示“请输入要修改的好友姓名：”和“请输入修改后的好友姓名：”分别输入修改前和修改后的好友姓名，修改后会提示“备注成功”。
# 展示好友：若用户还没有添加过好友，提示“好友列表为空”，否则返回每个好友的姓名。
# 退出：关闭好友管理系统。
# 本任务要求编写程序，模拟实现如上所述的好友管理系统。
# 文件读取要使用相对路径，确保在任何的电脑、终端都可以运行